<?php
/**
* author:hc
* 初始化
*/
defined('HC_APP') OR exit('No direct script access allowed');
//全局记录加载文件
function hcrequire($path){
	if(!is_file($path)){
		msg_error($path.'文件不存在');exit;
	}
    $GLOBALS['trice_file'][]=$path;
    return require_once $path;
}
//manage模块专用
function m_load($class,$param=null){
	static $_classes = array();
	if(isset($_classes[$class])){
		return $_classes[$class];
	}
	$filename=MMODELS.$class.".php";
	if(!is_file($filename)){
		msg_error('不存在模块文件');
	}
	require_once($filename);
	$_classes[$class] = isset($param)
			? new $class($param)
			: new $class();
	return $_classes[$class];
}
function load_helpers($name,$ext='.php'){
	$filename=HC_HELPERS.'/'.$name.$ext;
	if(file_exists($filename)){
		return require_once($filename);
	}else{
		die('Unable to load the requested file:'.$filename);
	}
}
//加载目录下的配置 文件
function get_load_confog($dir){
	if(is_dir($dir)){
		$handler = opendir($dir);
		while (($filename = readdir($handler)) !== false){
		//务必使用!==，防止目录下出现类似文件名“0”等情况
	        if ($filename != "." && $filename != ".."){
	        	$file=$dir.'/'.$filename;
	        	if(is_file($file)){
					$_config=load_config($file);
	        		if(!empty($_config)){
						C($_config);
					}
				}
	        }
    	}
   	 	closedir($handler);
	}
	return true;
}
//加载目录下的函数 文件
function get_load_function($dir){
	if(is_dir($dir)){
		$handler = opendir($dir);
		while (($filename = readdir($handler)) !== false){
		//务必使用!==，防止目录下出现类似文件名“0”等情况
	        if ($filename != "." && $filename != ".."){
	        	$file=$dir.'/'.$filename;
	        	if(is_file($file)){
					  $ext  = pathinfo($file,PATHINFO_EXTENSION);
					  if($ext=='php'){
					  	hcrequire($file);
					  }
				}
	        }
    	}
   	 	closedir($handler);
	}
	return true;
}
function load_config($file){
    $ext  = pathinfo($file,PATHINFO_EXTENSION);
    switch($ext){
        case 'php':
            return require_once($file);
        case 'ini':
            return parse_ini_file($file);
        case 'yaml':
            return yaml_parse_file($file);
        case 'xml':
            return (array)simplexml_load_file($file);
        case 'json':
            return json_decode(file_get_contents($file), true);
        default:
            return '';
    }
}

function C($name=null, $value=null,$default=null) {
    static $_config = array();
    // 无参数时获取所有
    if (empty($name)) {
        return $_config;
    }
    // 优先执行设置获取或赋值
    if (is_string($name)) {
        if (!strpos($name, '.')) {
            $name = strtolower($name);
            if (is_null($value))
                return isset($_config[$name]) ? $_config[$name] : $default;
            $_config[$name] = $value;
            return null;
        }
        // 二维数组设置和获取支持
        $name = explode('.', $name);
        $name[0]   =  strtolower($name[0]);
        if (is_null($value))
            return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : $default;
        $_config[$name[0]][$name[1]] = $value;
        return null;
    }
    // 批量设置
    if (is_array($name)){
        $_config = array_merge($_config, array_change_key_case($name,CASE_LOWER));
        return null;
    }
    return null; // 避免非法参数
}
set_error_handler('system_error',E_ALL);
/*
 * 抛出异常函数
 * (报错字符串)
 */
function msg_error($str){
    if(HC_DEBUG){
				if(isset($_POST['ajaxs'])){
						ajax_return(false,$str);
				}
        echo '<meta charset="utf-8">';
        trigger_error($str, E_USER_ERROR);
        exit;
    }else{
		return false;
	}
}
/*
 * 自定义系统异常 trigger_error执行函数
 * errnoe 错误码
 * errstr 报错内容
 * errfile 出错文件
 * errline 出错行
 */
function system_error($errno, $errstr, $errfile, $errline){
    echo "<hr /><b style='color:red;'>".$errstr."</b><br />";
    if(HC_DEBUG){
        echo 'error_file:'.$errfile.'<br />';
        echo 'error_line on:'.$errline.'<br />';
        echo 'error_number:'.$errno.'<br />';
        echo 'error:'.$errstr.'<br /><hr />';
    }
}
?>
